struts 2.3.16 採用动态调用发现不工作报404 not found,网上查找原因:
1.由于:struts2中默认不同意使用DMI
所以:须要在配置文件里打开: <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
改动发现报No result defined for action
2.错误信息来看,是说未定义result。
你有没有配置拦截器<interceptor-ref name="validation"/>?假设有的话,去掉全部的拦截器。
包含这个缺省的拦截器栈:<default-interceptor-ref name="defaultStack"/>struts调用action的3种方式:(引至互联网)
动态方法调用在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action相应多个请求的处理,以免Action太多第一种方式:指定method属性这样的方式我们前面已经用到过,相似以下的配置就能够实现关于通配符匹配的优先权: (1)假设struts.xml里面有相应的action name ,就算它有其它通配符匹配的,都优先相应全然同样的。 比方 有一个 action name 是 "user_add" 另一个是 "user_*"。redirect 另外一种方式:感叹号方式(须要开启),官网不推荐使用这样的方式,建议大家不要使用.用这样的方式须要先开启一个开关 /WEB-INF/JspPage/chapter2/plaintext.jsp 将此常量设置为true,这样的方式才干使用,使用见演示样例Actionpackage chapter3.action;public class Chapter3Action {public String result1(){ return "result1";}public String result2(){ return "result2";}} Jsp中訪问方式 result1 result2 假设配置了后缀,必须这样写:/chapter4/chapter4Action!create.actionXML中配置方式 第三种方式:通配符方式(官网推荐使用)首先得关闭开关 /WEB-INF/JspPage/chapter3/result1.jsp /WEB-INF/JspPage/chapter3/result2.jsp /WEB-INF/JspPage/chapter3/chapter3.jsp 这一种方式是由第一种转变过来的,我们能够看到,第一种方式有非常多反复的代码,那么我们能够进行变形,看以下的代码 chapter3_*这里的*就是你呆会要匹配的字符串,即你在后面的请求中得这样写http://...../ chapter3_create 或 http://...../ chapter3_update注意,这时你action中必须有create和update方法与之匹配,甚至还能够这样匹配 /…/test.jsp 可是这时一定要有相应的JSP页面存在,而且相应的路径不能错,这就对我们的命名进行了强制性的规定,一定要规范.课堂演示样例:Actionpublic class Chapter4Action extends ActionSupport {public String list(){ return "list";}public String create(){ return "create";}public String index(){ return "index";}} XML: /…/{1}.jsp /WEB-INF/JspPage/chapter4/chapter4_{1}.jsp
如今,有一个请求是 "user_add.action "。那么。它会优先匹配"user_add " 。
(2)假设一个action name相应于两个带通配符的action name 那么。须要看这个配置谁在前面,它匹配写在前面的 比方 有一个 action name 是 "*_*" 另一个是 "user_*" 。如今。有一个请求是 "user_add.action ",.那么它会优先匹配写在前面的那个action (3)不论什么带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高. 总结:因此我们应该把具有含有最多通配符的Acton配置放在最后,否则Struts2一一匹配全部的Action,这会减少程序的效率。